Displays a dialog with a custom content that requires attention or provides additional information.
Storybook@nextui-org/modalReact AriaSourceStyles sourceInstallationnpx nextui-cli@latest add modalThe above command is for individual installation only. You may skip this step if @nextui-org/react is already installed globally.ImportNextUI exports 5 modal-related components:
Modal: The main component to display a modal.ModalContent: The wrapper of the other modal components.ModalHeader: The header of the modal.ModalBody: The body of the modal.ModalFooter: The footer of the modal.UsageWhen the modal opens:
Focus is bounded within the modal and set to the first tabbable element.Content behind a modal dialog is inert, meaning that users cannot interact with it.SizesNon-dissmissableBy default, the modal can be closed by clicking on the overlay or pressing the Esc key.You can disable this behavior by setting the following properties:
Set the isDismissable property to false to prevent the modal from closing when clicking on the overlay.Set the isKeyboardDismissDisabled property to true to prevent the modal from closing when pressing the Esc key.Modal placementBy default the modal is centered on screens higher than sm and is at the bottom of the screen on mobile. This placement is called auto, butyou can change it by using the placement prop.
Note: The top-center and bottom-center positions mean that the modal is positioned at the top / bottom of the screenon mobile and at the center of the screen on desktop.
Overflow scrollYou can use the scrollBehavior prop to set the scroll behavior of the modal.
inside: The modal content will be scrollable.outside: The modal content will be scrollable and the modal will be fixed.With FormThe Modal handles the focus within the modal content. It means that you can use the modal withform elements without any problem. the focus returns to the trigger when the modal closes.
Note: You can add the autoFocus prop to the first Input component to focus it when the modal opens.
BackdropThe Modal component has a backdrop prop to show a backdrop behind the modal. The backdrop can beeither transparent, opaque or blur. The default value is opaque.
Custom BackdropYou can customize the backdrop by using the backdrop slot.
Custom MotionModal offers a motionProps property to customize the enter / exit animation.
Learn more about Framer motion variants here.
Slotswrapper: The wrapper slot of the modal. It wraps the base and the backdrop slots.base: The main slot of the modal content.backdrop: The backdrop slot, it is displayed behind the modal.header: The header of the modal, it is displayed at the top of the modal.body: The body of the modal, it is displayed in the middle of the modal.footer: The footer of the modal, it is displayed at the bottom of the modal.closeButton: The close button of the modal.Custom StylesYou can customize the Modal component by passing custom Tailwind CSS classes to the component slots.
Data AttributesModal has the following attributes on the base element:
data-open:When the modal is open. Based on modal state.data-dismissable:When the modal is dismissable. Based on isDismissable prop.AccessibilityContent outside the modal is hidden from assistive technologies while it is open.The modal optionally closes when interacting outside, or pressing the Esc key.Focus is moved into the modal on mount, and restored to the trigger element on unmount.While open, focus is contained within the modal, preventing the user from tabbing outside.Scrolling the page behind the modal is prevented while it is open, including in mobile browsers.APIModal PropsAttributeTypeDescriptionDefaultchildren*ReactNodeThe content of the modal. It's usually the ModalContent.-sizexs | sm | md | lg | xl | 2xl | 3xl | 4xl | 5xl | fullThe modal size. This changes the modal max-width and height (full).mdradiusnone | sm | md | lgThe modal border radius.lgshadownone | sm | md | lgThe modal shadow.lgbackdroptransparent | opaque | blurThe modal backdrop type.opaquescrollBehaviornormal | inside | outsideThe modal scroll behavior.normalplacementauto | top | center | bottomThe modal position.autoisOpenbooleanWhether the modal is open by default (controlled).-defaultOpenbooleanWhether the modal is open by default (uncontrolled).-isDismissablebooleanWhether the modal can be closed by clicking on the overlay or pressing the Esc key.trueisKeyboardDismissDisabledbooleanWhether pressing the Esc key to close the modal should be disabled.falseshouldBlockScrollbooleanWhether the modal should block the scroll of the page on open.truehideCloseButtonbooleanWhether to hide the modal close button.falsecloseButtonReactNodeCustom close button to display on top right corner.-motionPropsMotionPropsThe props to modify the framer motion animation. Use the variants API to create your own animation.portalContainerHTMLElementThe container element in which the overlay portal will be placed.document.bodydisableAnimationbooleanWhether the modal should not have animations.falseclassNamesRecordAllows to set custom class names for the modal slots.-Modal EventsAttributeTypeDescriptiononOpenChange(isOpen: boolean) => voidHandler that is called when the modal's open state changes.onClose() => voidHandler that is called when the modal is closed.Modal typesMotion Propsexport type MotionProps = HTMLMotionProps; // @see https://www.framer.com/motion/